[INFO] cloning repository https://github.com/johncallahan/rindy
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/johncallahan/rindy" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fjohncallahan%2Frindy", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fjohncallahan%2Frindy'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] c6896c50bb25a6e733bafef979c9ae0fc90b9cbc
[INFO] building johncallahan/rindy against master#ff34b919075f35a1787659e9c448a34b06bab8de for issue-85264
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fjohncallahan%2Frindy" "/workspace/builds/worker-0/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-0/source'...
[INFO] [stderr] done.
[INFO] validating manifest of git repo https://github.com/johncallahan/rindy on toolchain ff34b919075f35a1787659e9c448a34b06bab8de
[INFO] running `Command { std: "/workspace/cargo-home/bin/cargo" "+ff34b919075f35a1787659e9c448a34b06bab8de" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] started tweaking git repo https://github.com/johncallahan/rindy
[INFO] finished tweaking git repo https://github.com/johncallahan/rindy
[INFO] tweaked toml for git repo https://github.com/johncallahan/rindy written to /workspace/builds/worker-0/source/Cargo.toml
[INFO] crate git repo https://github.com/johncallahan/rindy already has a lockfile, it will not be regenerated
[INFO] running `Command { std: "/workspace/cargo-home/bin/cargo" "+ff34b919075f35a1787659e9c448a34b06bab8de" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:20528e8c29e4536546f0102ce88568b16ea7538393a33fcca951030f7af10457" "/opt/rustwide/cargo-home/bin/cargo" "+ff34b919075f35a1787659e9c448a34b06bab8de" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 99afba2b09a0554061f2588c8dcaeb987c7d42f90f1cca81f2ee70c8b77cfa12
[INFO] [stderr] WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.
[INFO] running `Command { std: "docker" "start" "-a" "99afba2b09a0554061f2588c8dcaeb987c7d42f90f1cca81f2ee70c8b77cfa12", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "99afba2b09a0554061f2588c8dcaeb987c7d42f90f1cca81f2ee70c8b77cfa12", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "99afba2b09a0554061f2588c8dcaeb987c7d42f90f1cca81f2ee70c8b77cfa12", kill_on_drop: false }`
[INFO] [stdout] 99afba2b09a0554061f2588c8dcaeb987c7d42f90f1cca81f2ee70c8b77cfa12
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:20528e8c29e4536546f0102ce88568b16ea7538393a33fcca951030f7af10457" "/opt/rustwide/cargo-home/bin/cargo" "+ff34b919075f35a1787659e9c448a34b06bab8de" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr] WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.
[INFO] [stdout] d9ea231ee3046678136a2a7701259cfb1ee054297a1ae939923a2fc067511ce8
[INFO] running `Command { std: "docker" "start" "-a" "d9ea231ee3046678136a2a7701259cfb1ee054297a1ae939923a2fc067511ce8", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v0.4.27
[INFO] [stderr]    Compiling unicode-xid v0.1.0
[INFO] [stderr]    Compiling syn v0.15.32
[INFO] [stderr]    Compiling memchr v2.2.0
[INFO] [stderr]    Compiling libc v0.2.41
[INFO] [stderr]    Compiling ucd-util v0.1.3
[INFO] [stderr]    Compiling regex v1.1.6
[INFO] [stderr]    Compiling cc v1.0.35
[INFO] [stderr]    Compiling lazy_static v1.3.0
[INFO] [stderr]    Compiling utf8-ranges v1.0.2
[INFO] [stderr]    Compiling pkg-config v0.3.14
[INFO] [stderr]    Compiling serde v1.0.90
[INFO] [stderr]    Compiling cfg-if v0.1.7
[INFO] [stderr]    Compiling ryu v0.2.7
[INFO] [stderr]    Compiling rustc-demangle v0.1.14
[INFO] [stderr]    Compiling num-traits v0.2.6
[INFO] [stderr]    Compiling libcruby-sys v0.7.5
[INFO] [stderr]    Compiling num-derive v0.2.4
[INFO] [stderr]    Compiling itoa v0.4.3
[INFO] [stderr]    Compiling cstr-macro v0.1.0
[INFO] [stderr]    Compiling futures v0.1.26
[INFO] [stderr]    Compiling lazy_static v0.2.11
[INFO] [stderr]    Compiling thread_local v0.3.6
[INFO] [stderr]    Compiling log v0.4.6
[INFO] [stderr]    Compiling regex-syntax v0.6.6
[INFO] [stderr]    Compiling quote v0.6.12
[INFO] [stderr]    Compiling helix v0.7.5
[INFO] [stderr]    Compiling aho-corasick v0.7.3
[INFO] [stderr]    Compiling backtrace-sys v0.1.28
[INFO] [stderr]    Compiling backtrace v0.3.11
[INFO] [stderr]    Compiling synstructure v0.10.1
[INFO] [stderr]    Compiling serde_json v1.0.39
[INFO] [stderr]    Compiling failure_derive v0.1.5
[INFO] [stderr]    Compiling serde_derive v1.0.90
[INFO] [stderr]    Compiling indy-sys v1.8.2
[INFO] [stderr]    Compiling failure v0.1.5
[INFO] [stderr]    Compiling indy v1.8.2
[INFO] [stderr]    Compiling rindy v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] {"reason":"compiler-message","package_id":"rindy 0.1.0 (path+file:///opt/rustwide/workdir)","manifest_path":"/opt/rustwide/workdir/Cargo.toml","target":{"kind":["cdylib"],"crate_types":["cdylib"],"name":"rindy","src_path":"/opt/rustwide/workdir/src/lib.rs","edition":"2015","doc":true,"doctest":false,"test":true},"message":{"message":"use of deprecated macro `try`: use the `?` operator instead","code":{"code":"deprecated","explanation":null},"level":"warning","spans":[{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/init.rs","byte_start":6839,"byte_end":6842,"line_start":233,"line_end":233,"column_start":28,"column_end":31,"is_primary":true,"text":[{"text":"                let $arg = try!(<$argty>::from_ruby($arg));","highlight_start":28,"highlight_end":31}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/init.rs","byte_start":1882,"byte_end":1927,"line_start":71,"line_end":71,"column_start":13,"column_end":58,"is_primary":false,"text":[{"text":"            codegen_define_method!(def, $class, $method);","highlight_start":13,"highlight_end":58}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/init.rs","byte_start":245,"byte_end":284,"line_start":10,"line_end":10,"column_start":17,"column_end":56,"is_primary":false,"text":[{"text":"                codegen_class_binding!($class, $class);","highlight_start":17,"highlight_end":56}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/codegen.rs","byte_start":187,"byte_end":217,"line_start":10,"line_end":10,"column_start":9,"column_end":39,"is_primary":false,"text":[{"text":"        codegen_init! { [ $($ast)* ] }","highlight_start":9,"highlight_end":39}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1604,"byte_end":1621,"line_start":80,"line_end":80,"column_start":9,"column_end":26,"is_primary":false,"text":[{"text":"        codegen! { $ast }","highlight_start":9,"highlight_end":26}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":7003,"byte_end":7157,"line_start":308,"line_end":314,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":20178,"byte_end":20608,"line_start":796,"line_end":810,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":19263,"byte_end":19707,"line_start":760,"line_end":775,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":13142,"byte_end":13711,"line_start":541,"line_end":559,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":8104,"byte_end":8376,"line_start":352,"line_end":361,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":6465,"byte_end":6697,"line_start":286,"line_end":294,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":20178,"byte_end":20608,"line_start":796,"line_end":810,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":19263,"byte_end":19707,"line_start":760,"line_end":775,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":13142,"byte_end":13711,"line_start":541,"line_end":559,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":8104,"byte_end":8376,"line_start":352,"line_end":361,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":6465,"byte_end":6697,"line_start":286,"line_end":294,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":20178,"byte_end":20608,"line_start":796,"line_end":810,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":19263,"byte_end":19707,"line_start":760,"line_end":775,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":11347,"byte_end":11919,"line_start":475,"line_end":493,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":8104,"byte_end":8376,"line_start":352,"line_end":361,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":6465,"byte_end":6697,"line_start":286,"line_end":294,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":20178,"byte_end":20608,"line_start":796,"line_end":810,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":19263,"byte_end":19707,"line_start":760,"line_end":775,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":13142,"byte_end":13711,"line_start":541,"line_end":559,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":8104,"byte_end":8376,"line_start":352,"line_end":361,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":6465,"byte_end":6697,"line_start":286,"line_end":294,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":20178,"byte_end":20608,"line_start":796,"line_end":810,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":18046,"byte_end":18807,"line_start":718,"line_end":741,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":8683,"byte_end":9263,"line_start":376,"line_end":394,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":7625,"byte_end":7861,"line_start":332,"line_end":340,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":6465,"byte_end":6697,"line_start":286,"line_end":294,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":5224,"byte_end":5671,"line_start":234,"line_end":248,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":4193,"byte_end":4661,"line_start":197,"line_end":212,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":3706,"byte_end":3915,"line_start":176,"line_end":183,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1743,"byte_end":1985,"line_start":88,"line_end":97,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":7003,"byte_end":7157,"line_start":308,"line_end":314,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":20178,"byte_end":20608,"line_start":796,"line_end":810,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":19263,"byte_end":19707,"line_start":760,"line_end":775,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":13142,"byte_end":13711,"line_start":541,"line_end":559,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":8104,"byte_end":8376,"line_start":352,"line_end":361,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":6465,"byte_end":6697,"line_start":286,"line_end":294,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":20178,"byte_end":20608,"line_start":796,"line_end":810,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":19263,"byte_end":19707,"line_start":760,"line_end":775,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":13142,"byte_end":13711,"line_start":541,"line_end":559,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":8104,"byte_end":8376,"line_start":352,"line_end":361,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":6465,"byte_end":6697,"line_start":286,"line_end":294,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":20178,"byte_end":20608,"line_start":796,"line_end":810,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":19263,"byte_end":19707,"line_start":760,"line_end":775,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":11347,"byte_end":11919,"line_start":475,"line_end":493,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":8104,"byte_end":8376,"line_start":352,"line_end":361,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":6465,"byte_end":6697,"line_start":286,"line_end":294,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":20178,"byte_end":20608,"line_start":796,"line_end":810,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":19263,"byte_end":19707,"line_start":760,"line_end":775,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":13142,"byte_end":13711,"line_start":541,"line_end":559,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":8104,"byte_end":8376,"line_start":352,"line_end":361,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":6465,"byte_end":6697,"line_start":286,"line_end":294,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":20178,"byte_end":20608,"line_start":796,"line_end":810,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":18046,"byte_end":18807,"line_start":718,"line_end":741,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":8683,"byte_end":9263,"line_start":376,"line_end":394,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":7625,"byte_end":7861,"line_start":332,"line_end":340,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":6465,"byte_end":6697,"line_start":286,"line_end":294,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":5224,"byte_end":5671,"line_start":234,"line_end":248,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":4193,"byte_end":4661,"line_start":197,"line_end":212,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":3706,"byte_end":3915,"line_start":176,"line_end":183,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1743,"byte_end":1985,"line_start":88,"line_end":97,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/mod.rs","byte_start":201,"byte_end":315,"line_start":19,"line_end":23,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":"        parse! {","highlight_start":9,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: { ast: [] }","highlight_start":1,"highlight_end":31},{"text":"        }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"src/lib.rs","byte_start":286,"byte_end":2647,"line_start":17,"line_end":82,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"ruby! {","highlight_start":1,"highlight_end":8},{"text":"    class IndyWallet {","highlight_start":1,"highlight_end":23},{"text":"        struct {","highlight_start":1,"highlight_end":17},{"text":"            name: String,","highlight_start":1,"highlight_end":26},{"text":"            handle: i32","highlight_start":1,"highlight_end":24},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        def initialize(helix, name: String) {","highlight_start":1,"highlight_end":46},{"text":"            let handle = 0;","highlight_start":1,"highlight_end":28},{"text":"            IndyWallet { helix, name, handle }","highlight_start":1,"highlight_end":47},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        def create(&self) {","highlight_start":1,"highlight_end":28},{"text":"            let config = format!(\"{{\\\"id\\\":\\\"wallet{}\\\"}}\", self.name);","highlight_start":1,"highlight_end":72},{"text":"            let credentials = String::from(\"{\\\"key\\\":\\\"8dvfYSt5d1taSd6yJdpjq4emkwsPDDLYxkNFysFD2cZY\\\",\\\"key_derivation_method\\\":\\\"RAW\\\"}\");","highlight_start":1,"highlight_end":140},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            wallet::create_wallet(&config, &credentials).wait().unwrap();","highlight_start":1,"highlight_end":74},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"        def open(&mut self) {","highlight_start":1,"highlight_end":30},{"text":"            let config = format!(\"{{\\\"id\\\":\\\"wallet{}\\\"}}\", self.name);","highlight_start":1,"highlight_end":72},{"text":"            let credentials = String::from(\"{\\\"key\\\":\\\"8dvfYSt5d1taSd6yJdpjq4emkwsPDDLYxkNFysFD2cZY\\\",\\\"key_derivation_method\\\":\\\"RAW\\\"}\");","highlight_start":1,"highlight_end":140},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            self.handle = wallet::open_wallet(&config, &credentials).wait().unwrap();","highlight_start":1,"highlight_end":86},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"        def close(&self) {","highlight_start":1,"highlight_end":27},{"text":"            wallet::close_wallet(self.handle).wait().unwrap();","highlight_start":1,"highlight_end":63},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"        def delete(&self) {","highlight_start":1,"highlight_end":28},{"text":"            let config = format!(\"{{\\\"id\\\":\\\"wallet{}\\\"}}\", self.name);","highlight_start":1,"highlight_end":72},{"text":"            let credentials = String::from(\"{\\\"key\\\":\\\"8dvfYSt5d1taSd6yJdpjq4emkwsPDDLYxkNFysFD2cZY\\\",\\\"key_derivation_method\\\":\\\"RAW\\\"}\");","highlight_start":1,"highlight_end":140},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            wallet::delete_wallet(&config, &credentials).wait().unwrap();","highlight_start":1,"highlight_end":74},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    }","highlight_start":1,"highlight_end":6},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    class IndyPool {","highlight_start":1,"highlight_end":21},{"text":"        struct {","highlight_start":1,"highlight_end":17},{"text":"            name: String,","highlight_start":1,"highlight_end":26},{"text":"            handle: i32","highlight_start":1,"highlight_end":24},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        def initialize(helix, name: String) {","highlight_start":1,"highlight_end":46},{"text":"            let handle = 0;","highlight_start":1,"highlight_end":28},{"text":"            const PROTOCOL_VERSION: usize = 2;","highlight_start":1,"highlight_end":47},{"text":"            pool::set_protocol_version(PROTOCOL_VERSION).wait().unwrap();","highlight_start":1,"highlight_end":74},{"text":"            IndyPool { helix, name, handle }","highlight_start":1,"highlight_end":45},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"        ","highlight_start":1,"highlight_end":9},{"text":"        def create(&self) {","highlight_start":1,"highlight_end":28},{"text":"            let pool_config_file = create_genesis_txn_file_for_pool(&self.name);","highlight_start":1,"highlight_end":81},{"text":"            let pool_config = json!({","highlight_start":1,"highlight_end":38},{"text":"                \"genesis_txn\" : &pool_config_file","highlight_start":1,"highlight_end":50},{"text":"            });","highlight_start":1,"highlight_end":16},{"text":"            pool::create_pool_ledger_config(&self.name, Some(&pool_config.to_string())).wait().unwrap();","highlight_start":1,"highlight_end":105},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"        def open(&mut self) {","highlight_start":1,"highlight_end":30},{"text":"            self.handle = pool::open_pool_ledger(&self.name, None).wait().unwrap();","highlight_start":1,"highlight_end":84},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"        def close(&self) {","highlight_start":1,"highlight_end":27},{"text":"            pool::close_pool_ledger(self.handle).wait().unwrap();","highlight_start":1,"highlight_end":66},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"        def delete(&self) {","highlight_start":1,"highlight_end":28},{"text":"            pool::delete_pool_ledger(&self.name).wait().unwrap();","highlight_start":1,"highlight_end":66},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    }","highlight_start":1,"highlight_end":6},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},"macro_decl_name":"ruby!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/mod.rs","byte_start":147,"byte_end":323,"line_start":17,"line_end":25,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! ruby {","highlight_start":1,"highlight_end":1},{"text":"    { $($rest:tt)* } => {","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":1},{"text":"            state: top_level,","highlight_start":1,"highlight_end":1},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":1},{"text":"            stack: { ast: [] }","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    }","highlight_start":1,"highlight_end":1},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":1},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":1},{"text":"        state: top_level,","highlight_start":1,"highlight_end":1},{"text":"        buffer: {},","highlight_start":1,"highlight_end":1},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":1},{"text":"    } => {","highlight_start":1,"highlight_end":1},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":1},{"text":"    };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":1},{"text":"        state: top_level,","highlight_start":1,"highlight_end":1},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":1},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":1},{"text":"    } => {","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":1},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":1},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":1},{"text":"            stack: {","highlight_start":1,"highlight_end":1},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":1},{"text":"                pub: false,","highlight_start":1,"highlight_end":1},{"text":"                reopen: false,","highlight_start":1,"highlight_end":1},{"text":"                $($stack)*","highlight_start":1,"highlight_end":1},{"text":"            }","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":1},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":1},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":1},{"text":"        stack: {","highlight_start":1,"highlight_end":1},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":1},{"text":"            pub: false,","highlight_start":1,"highlight_end":1},{"text":"            reopen: false,","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    } => {","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":1},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":1},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":1},{"text":"            stack: {","highlight_start":1,"highlight_end":1},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":1},{"text":"                pub: false,","highlight_start":1,"highlight_end":1},{"text":"                reopen: false,","highlight_start":1,"highlight_end":1},{"text":"                $($stack)*","highlight_start":1,"highlight_end":1},{"text":"            }","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":1},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":1},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":1},{"text":"        stack: {","highlight_start":1,"highlight_end":1},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":"            pub: false,","highlight_start":1,"highlight_end":1},{"text":"            reopen: false,","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    } => {","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":1},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":1},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":1},{"text":"            stack: {","highlight_start":1,"highlight_end":1},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":1},{"text":"                pub: true,","highlight_start":1,"highlight_end":1},{"text":"                reopen: false,","highlight_start":1,"highlight_end":1},{"text":"                $($stack)*","highlight_start":1,"highlight_end":1},{"text":"            }","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":1},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":1},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":1},{"text":"        stack: {","highlight_start":1,"highlight_end":1},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":1},{"text":"            reopen: false,","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    } => {","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":1},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":1},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":1},{"text":"            stack: {","highlight_start":1,"highlight_end":1},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":1},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":1},{"text":"                reopen: true,","highlight_start":1,"highlight_end":1},{"text":"                $($stack)*","highlight_start":1,"highlight_end":1},{"text":"            }","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":1},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":1},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":1},{"text":"        stack: {","highlight_start":1,"highlight_end":1},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    } => {","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":1},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":1},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":1},{"text":"            stack: {","highlight_start":1,"highlight_end":1},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":1},{"text":"                $($stack)*","highlight_start":1,"highlight_end":1},{"text":"            }","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":1},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":1},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":1},{"text":"        stack: {","highlight_start":1,"highlight_end":1},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":1},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    } => {","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":1},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":1},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":1},{"text":"            stack: {","highlight_start":1,"highlight_end":1},{"text":"                class: {","highlight_start":1,"highlight_end":1},{"text":"                    type: class,","highlight_start":1,"highlight_end":1},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":1},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":1},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":1},{"text":"                    struct: (),","highlight_start":1,"highlight_end":1},{"text":"                    methods: []","highlight_start":1,"highlight_end":1},{"text":"                },","highlight_start":1,"highlight_end":1},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":1},{"text":"                $($stack)*","highlight_start":1,"highlight_end":1},{"text":"            }","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":1},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":1},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":1},{"text":"        stack: {","highlight_start":1,"highlight_end":1},{"text":"            class: {","highlight_start":1,"highlight_end":1},{"text":"                type: class,","highlight_start":1,"highlight_end":1},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":1},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":1},{"text":"                struct: (),","highlight_start":1,"highlight_end":1},{"text":"                methods: []","highlight_start":1,"highlight_end":1},{"text":"            },","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    } => {","highlight_start":1,"highlight_end":1},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":1},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":1},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":1},{"text":"            stack: {","highlight_start":1,"highlight_end":1},{"text":"                class: {","highlight_start":1,"highlight_end":1},{"text":"                    type: class,","highlight_start":1,"highlight_end":1},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":1},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":1},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":1},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":1},{"text":"                    methods: []","highlight_start":1,"highlight_end":1},{"text":"                },","highlight_start":1,"highlight_end":1},{"text":"                $($stack)*","highlight_start":1,"highlight_end":1},{"text":"            }","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":1},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":1},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":1},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":1},{"text":"    } => {","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":1},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":1},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":1},{"text":"            stack: $stack","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":1},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":1},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":1},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":1},{"text":"    } => {","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":1},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":1},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":1},{"text":"            stack: {","highlight_start":1,"highlight_end":1},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":1},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":1},{"text":"                $($stack)*","highlight_start":1,"highlight_end":1},{"text":"            }","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":1},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":1},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":1},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":1},{"text":"    } => {","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":1},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":1},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":1},{"text":"            stack: {","highlight_start":1,"highlight_end":1},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":1},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":1},{"text":"                $($stack)*","highlight_start":1,"highlight_end":1},{"text":"            }","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":1},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":1},{"text":"        buffer: {},","highlight_start":1,"highlight_end":1},{"text":"        stack: {","highlight_start":1,"highlight_end":1},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":1},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":1},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    } => {","highlight_start":1,"highlight_end":1},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":1},{"text":"            state: top_level,","highlight_start":1,"highlight_end":1},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":1},{"text":"            stack: {","highlight_start":1,"highlight_end":1},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":1},{"text":"            }","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":1},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":1},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":1},{"text":"        stack: {","highlight_start":1,"highlight_end":1},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":1},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    } => {","highlight_start":1,"highlight_end":1},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":1},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":1},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":1},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":1},{"text":"            stack: {","highlight_start":1,"highlight_end":1},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":1},{"text":"                class: $class,","highlight_start":1,"highlight_end":1},{"text":"                $($stack)*","highlight_start":1,"highlight_end":1},{"text":"            }","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":1},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":1},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":1},{"text":"        stack: {","highlight_start":1,"highlight_end":1},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":1},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    } => {","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":1},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":1},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":1},{"text":"            stack: {","highlight_start":1,"highlight_end":1},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":1},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":1},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":1},{"text":"                $($stack)*","highlight_start":1,"highlight_end":1},{"text":"            }","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":1},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":1},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":1},{"text":"        stack: {","highlight_start":1,"highlight_end":1},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    } => {","highlight_start":1,"highlight_end":1},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":1},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":1},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":1},{"text":"            stack: {","highlight_start":1,"highlight_end":1},{"text":"                method: {","highlight_start":1,"highlight_end":1},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":1},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":1},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":1},{"text":"                    self: {","highlight_start":1,"highlight_end":1},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":1},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":1},{"text":"                    },","highlight_start":1,"highlight_end":1},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":1},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":1},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":1},{"text":"                },","highlight_start":1,"highlight_end":1},{"text":"                $($stack)*","highlight_start":1,"highlight_end":1},{"text":"            }","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":1},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":1},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":1},{"text":"        stack: {","highlight_start":1,"highlight_end":1},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    } => {","highlight_start":1,"highlight_end":1},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":1},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":1},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":1},{"text":"            stack: {","highlight_start":1,"highlight_end":1},{"text":"                method: {","highlight_start":1,"highlight_end":1},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":1},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":1},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":1},{"text":"                    self: {","highlight_start":1,"highlight_end":1},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":1},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":1},{"text":"                    },","highlight_start":1,"highlight_end":1},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":1},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":1},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":1},{"text":"                },","highlight_start":1,"highlight_end":1},{"text":"                $($stack)*","highlight_start":1,"highlight_end":1},{"text":"            }","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":1},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":1},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":1},{"text":"        stack: {","highlight_start":1,"highlight_end":1},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":1},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    } => {","highlight_start":1,"highlight_end":1},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":1},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":1},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":1},{"text":"            stack: {","highlight_start":1,"highlight_end":1},{"text":"                method: {","highlight_start":1,"highlight_end":1},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":1},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":1},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":1},{"text":"                    self: {","highlight_start":1,"highlight_end":1},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":1},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":1},{"text":"                    },","highlight_start":1,"highlight_end":1},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":1},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":1},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":1},{"text":"                },","highlight_start":1,"highlight_end":1},{"text":"                $($stack)*","highlight_start":1,"highlight_end":1},{"text":"            }","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":1},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":1},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":1},{"text":"        stack: {","highlight_start":1,"highlight_end":1},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":1},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    } => {","highlight_start":1,"highlight_end":1},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":1},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":1},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":1},{"text":"            stack: {","highlight_start":1,"highlight_end":1},{"text":"                method: {","highlight_start":1,"highlight_end":1},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":1},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":1},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":1},{"text":"                    self: {","highlight_start":1,"highlight_end":1},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":1},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":1},{"text":"                    },","highlight_start":1,"highlight_end":1},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":1},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":1},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":1},{"text":"                },","highlight_start":1,"highlight_end":1},{"text":"                $($stack)*","highlight_start":1,"highlight_end":1},{"text":"            }","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":1},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":1},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":1},{"text":"        stack: {","highlight_start":1,"highlight_end":1},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":1},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    } => {","highlight_start":1,"highlight_end":1},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":1},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":1},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":1},{"text":"            stack: {","highlight_start":1,"highlight_end":1},{"text":"                method: {","highlight_start":1,"highlight_end":1},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":1},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":1},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":1},{"text":"                    self: {","highlight_start":1,"highlight_end":1},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":1},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":1},{"text":"                    },","highlight_start":1,"highlight_end":1},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":1},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":1},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":1},{"text":"                },","highlight_start":1,"highlight_end":1},{"text":"                $($stack)*","highlight_start":1,"highlight_end":1},{"text":"            }","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":1},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":1},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":1},{"text":"        stack: {","highlight_start":1,"highlight_end":1},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":1},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    } => {","highlight_start":1,"highlight_end":1},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":1},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":1},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":1},{"text":"            stack: {","highlight_start":1,"highlight_end":1},{"text":"                method: {","highlight_start":1,"highlight_end":1},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":1},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":1},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":1},{"text":"                    self: {","highlight_start":1,"highlight_end":1},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":1},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":1},{"text":"                    },","highlight_start":1,"highlight_end":1},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":1},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":1},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":1},{"text":"                },","highlight_start":1,"highlight_end":1},{"text":"                $($stack)*","highlight_start":1,"highlight_end":1},{"text":"            }","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":1},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":1},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":1},{"text":"        stack: {","highlight_start":1,"highlight_end":1},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":1},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    } => {","highlight_start":1,"highlight_end":1},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":1},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":1},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":1},{"text":"            stack: {","highlight_start":1,"highlight_end":1},{"text":"                method: {","highlight_start":1,"highlight_end":1},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":1},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":1},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":1},{"text":"                    self: {","highlight_start":1,"highlight_end":1},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":1},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":1},{"text":"                    },","highlight_start":1,"highlight_end":1},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":1},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":1},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":1},{"text":"                },","highlight_start":1,"highlight_end":1},{"text":"                $($stack)*","highlight_start":1,"highlight_end":1},{"text":"            }","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":1},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":1},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":1},{"text":"        stack: {","highlight_start":1,"highlight_end":1},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":1},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    } => {","highlight_start":1,"highlight_end":1},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":1},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":1},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":1},{"text":"            stack: {","highlight_start":1,"highlight_end":1},{"text":"                method: {","highlight_start":1,"highlight_end":1},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":1},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":1},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":1},{"text":"                    self: {","highlight_start":1,"highlight_end":1},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":1},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":1},{"text":"                    },","highlight_start":1,"highlight_end":1},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":1},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":1},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":1},{"text":"                },","highlight_start":1,"highlight_end":1},{"text":"                $($stack)*","highlight_start":1,"highlight_end":1},{"text":"            }","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":1},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":1},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":1},{"text":"        stack: {","highlight_start":1,"highlight_end":1},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":1},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    } => {","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":1},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":1},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":1},{"text":"            stack: {","highlight_start":1,"highlight_end":1},{"text":"                method: {","highlight_start":1,"highlight_end":1},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":1},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":1},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":1},{"text":"                    self: (),","highlight_start":1,"highlight_end":1},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":1},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":1},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":1},{"text":"                },","highlight_start":1,"highlight_end":1},{"text":"                $($stack)*","highlight_start":1,"highlight_end":1},{"text":"            }","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":1},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":1},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":1},{"text":"        stack: {","highlight_start":1,"highlight_end":1},{"text":"            method: {","highlight_start":1,"highlight_end":1},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":1},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":1},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":1},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":1},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":1},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":1},{"text":"            },","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    } => {","highlight_start":1,"highlight_end":1},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":1},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":1},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":1},{"text":"            stack: {","highlight_start":1,"highlight_end":1},{"text":"                method: {","highlight_start":1,"highlight_end":1},{"text":"                    type: $type,","highlight_start":1,"highlight_end":1},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":1},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":1},{"text":"                    self: $self,","highlight_start":1,"highlight_end":1},{"text":"                    args: $args,","highlight_start":1,"highlight_end":1},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":1},{"text":"                    body: $body","highlight_start":1,"highlight_end":1},{"text":"                },","highlight_start":1,"highlight_end":1},{"text":"                $($stack)*","highlight_start":1,"highlight_end":1},{"text":"            }","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":1},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":1},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":1},{"text":"        stack: {","highlight_start":1,"highlight_end":1},{"text":"            method: {","highlight_start":1,"highlight_end":1},{"text":"                type: initializer,","highlight_start":1,"highlight_end":1},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":1},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":1},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":1},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":1},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":1},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":1},{"text":"            },","highlight_start":1,"highlight_end":1},{"text":"            class: {","highlight_start":1,"highlight_end":1},{"text":"                type: class,","highlight_start":1,"highlight_end":1},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":1},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":1},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":1},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":1},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":1},{"text":"            },","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    } => {","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":1},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":1},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":1},{"text":"            stack: {","highlight_start":1,"highlight_end":1},{"text":"                method: {","highlight_start":1,"highlight_end":1},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":1},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":1},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":1},{"text":"                    self: $self,","highlight_start":1,"highlight_end":1},{"text":"                    args: $args,","highlight_start":1,"highlight_end":1},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":1},{"text":"                    body: $body","highlight_start":1,"highlight_end":1},{"text":"                },","highlight_start":1,"highlight_end":1},{"text":"                class: {","highlight_start":1,"highlight_end":1},{"text":"                    type: class,","highlight_start":1,"highlight_end":1},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":1},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":1},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":1},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":1},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":1},{"text":"                },","highlight_start":1,"highlight_end":1},{"text":"                $($stack)*","highlight_start":1,"highlight_end":1},{"text":"            }","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":1},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":1},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":1},{"text":"        stack: {","highlight_start":1,"highlight_end":1},{"text":"            method: {","highlight_start":1,"highlight_end":1},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":1},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":1},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":1},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":1},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":1},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":1},{"text":"            },","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    } => {","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":1},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":1},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":1},{"text":"            stack: {","highlight_start":1,"highlight_end":1},{"text":"                method: {","highlight_start":1,"highlight_end":1},{"text":"                    type: $type,","highlight_start":1,"highlight_end":1},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":1},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":1},{"text":"                    self: $self,","highlight_start":1,"highlight_end":1},{"text":"                    args: $args,","highlight_start":1,"highlight_end":1},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":1},{"text":"                    body: $body","highlight_start":1,"highlight_end":1},{"text":"                },","highlight_start":1,"highlight_end":1},{"text":"                $($stack)*","highlight_start":1,"highlight_end":1},{"text":"            }","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":1},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":1},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":1},{"text":"        stack: {","highlight_start":1,"highlight_end":1},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":1},{"text":"            class: {","highlight_start":1,"highlight_end":1},{"text":"                type: class,","highlight_start":1,"highlight_end":1},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":1},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":1},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":1},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":1},{"text":"            },","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    } => {","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":1},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":1},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":1},{"text":"            stack: {","highlight_start":1,"highlight_end":1},{"text":"                class: {","highlight_start":1,"highlight_end":1},{"text":"                    type: class,","highlight_start":1,"highlight_end":1},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":1},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":1},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":1},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":1},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":1},{"text":"                },","highlight_start":1,"highlight_end":1},{"text":"                $($stack)*","highlight_start":1,"highlight_end":1},{"text":"            }","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":1},{"text":"        parse_error!(","highlight_start":1,"highlight_end":1},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":1},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":1},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":1},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":1},{"text":"        );","highlight_start":1,"highlight_end":1},{"text":"    };","highlight_start":1,"highlight_end":1},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":"    // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: top_level,","highlight_start":1,"highlight_end":26},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                pub: false,","highlight_start":1,"highlight_end":28},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: false,","highlight_start":1,"highlight_end":24},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: true,","highlight_start":1,"highlight_end":27},{"text":"                reopen: false,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: false,","highlight_start":1,"highlight_end":27},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                pub: $pub,","highlight_start":1,"highlight_end":27},{"text":"                reopen: true,","highlight_start":1,"highlight_end":30},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_class,","highlight_start":1,"highlight_end":32},{"text":"            buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_class,","highlight_start":1,"highlight_end":28},{"text":"        buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":"            reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: (),","highlight_start":1,"highlight_end":32},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":"                struct: (),","highlight_start":1,"highlight_end":28},{"text":"                methods: []","highlight_start":1,"highlight_end":28},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":"                    struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":"                    methods: []","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: $stack","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":"        stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_method,","highlight_start":1,"highlight_end":33},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":"                ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":"        buffer: {},","highlight_start":1,"highlight_end":20},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":"            ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: top_level,","highlight_start":1,"highlight_end":30},{"text":"            buffer: $program,","highlight_start":1,"highlight_end":30},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":"        assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                class: $class,","highlight_start":1,"highlight_end":31},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_method,","highlight_start":1,"highlight_end":29},{"text":"        buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":"            buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":"                ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":"                class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":"        buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { & },","highlight_start":1,"highlight_end":42},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: instance_method,","highlight_start":1,"highlight_end":43},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: {","highlight_start":1,"highlight_end":28},{"text":"                        ownership: { },","highlight_start":1,"highlight_end":40},{"text":"                        name: $self_arg","highlight_start":1,"highlight_end":40},{"text":"                    },","highlight_start":1,"highlight_end":23},{"text":"                    args: [ ],","highlight_start":1,"highlight_end":31},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":"        buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"            class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":"            buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: class_method,","highlight_start":1,"highlight_end":40},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: (),","highlight_start":1,"highlight_end":30},{"text":"                    args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":"                    ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":"                    body: uninitialized","highlight_start":1,"highlight_end":40},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: initializer,","highlight_start":1,"highlight_end":35},{"text":"                rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":"                ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: initializer,","highlight_start":1,"highlight_end":39},{"text":"                    rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: $methods","highlight_start":1,"highlight_end":38},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":"        buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: {","highlight_start":1,"highlight_end":22},{"text":"                type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":"                args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":"                ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":"                body: uninitialized","highlight_start":1,"highlight_end":36},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: finish_method,","highlight_start":1,"highlight_end":34},{"text":"            buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                method: {","highlight_start":1,"highlight_end":26},{"text":"                    type: $type,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    self: $self,","highlight_start":1,"highlight_end":33},{"text":"                    args: $args,","highlight_start":1,"highlight_end":33},{"text":"                    ret: { () },","highlight_start":1,"highlight_end":33},{"text":"                    body: $body","highlight_start":1,"highlight_end":32},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":6},{"text":"        state: finish_method,","highlight_start":1,"highlight_end":30},{"text":"        buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":"        stack: {","highlight_start":1,"highlight_end":17},{"text":"            method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":"            class: {","highlight_start":1,"highlight_end":21},{"text":"                type: class,","highlight_start":1,"highlight_end":29},{"text":"                rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":"                meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":"                methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":"            },","highlight_start":1,"highlight_end":15},{"text":"            $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    } => {","highlight_start":1,"highlight_end":11},{"text":"        parse! {","highlight_start":1,"highlight_end":17},{"text":"            state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":"            buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":"            stack: {","highlight_start":1,"highlight_end":21},{"text":"                class: {","highlight_start":1,"highlight_end":25},{"text":"                    type: class,","highlight_start":1,"highlight_end":33},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":"                    meta: $meta,","highlight_start":1,"highlight_end":33},{"text":"                    struct: $struct,","highlight_start":1,"highlight_end":37},{"text":"                    methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":"                },","highlight_start":1,"highlight_end":19},{"text":"                $($stack)*","highlight_start":1,"highlight_end":27},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":"        parse_error!(","highlight_start":1,"highlight_end":22},{"text":"            \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":"            \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":"            \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":"            format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":"        );","highlight_start":1,"highlight_end":11},{"text":"    };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"codegen!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/codegen.rs","byte_start":16,"byte_end":1968,"line_start":2,"line_end":84,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! codegen {","highlight_start":1,"highlight_end":1},{"text":"    { [ $($ast:tt)* ] } => {","highlight_start":1,"highlight_end":1},{"text":"        codegen! {","highlight_start":1,"highlight_end":1},{"text":"            type: top,","highlight_start":1,"highlight_end":1},{"text":"            classes: [],","highlight_start":1,"highlight_end":1},{"text":"            buffer: [ $($ast)* ]","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        codegen_init! { [ $($ast)* ] }","highlight_start":1,"highlight_end":1},{"text":"    };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":1},{"text":"        type: top,","highlight_start":1,"highlight_end":1},{"text":"        classes: [ $($class:tt)* ],","highlight_start":1,"highlight_end":1},{"text":"        buffer: []","highlight_start":1,"highlight_end":1},{"text":"    } => {","highlight_start":1,"highlight_end":1},{"text":"        codegen! {","highlight_start":1,"highlight_end":1},{"text":"            type: done,","highlight_start":1,"highlight_end":1},{"text":"            classes: [ $($class)* ]","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":1},{"text":"        type: top,","highlight_start":1,"highlight_end":1},{"text":"        classes: [","highlight_start":1,"highlight_end":1},{"text":"            $($class:tt)*","highlight_start":1,"highlight_end":1},{"text":"        ],","highlight_start":1,"highlight_end":1},{"text":"        buffer: [","highlight_start":1,"highlight_end":1},{"text":"            {","highlight_start":1,"highlight_end":1},{"text":"                type: class,","highlight_start":1,"highlight_end":1},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":1},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":"                meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":1},{"text":"                struct: $struct:tt,","highlight_start":1,"highlight_end":1},{"text":"                methods: [ $($method:tt)* ]","highlight_start":1,"highlight_end":1},{"text":"            }","highlight_start":1,"highlight_end":1},{"text":"            $($rest:tt)*","highlight_start":1,"highlight_end":1},{"text":"        ]","highlight_start":1,"highlight_end":1},{"text":"    } => {","highlight_start":1,"highlight_end":1},{"text":"        codegen! {","highlight_start":1,"highlight_end":1},{"text":"            type: top,","highlight_start":1,"highlight_end":1},{"text":"            classes: [","highlight_start":1,"highlight_end":1},{"text":"                $($class)*","highlight_start":1,"highlight_end":1},{"text":"                {","highlight_start":1,"highlight_end":1},{"text":"                    rust_name: $rust_name,","highlight_start":1,"highlight_end":1},{"text":"                    ruby_name: $ruby_name,","highlight_start":1,"highlight_end":1},{"text":"                    struct: { codegen_struct! { pub: $pub, rust_name: $rust_name, ruby_name: $ruby_name, struct: $struct } },","highlight_start":1,"highlight_end":1},{"text":"                    methods: [ $( codegen_method! { $method } )* ]","highlight_start":1,"highlight_end":1},{"text":"                }","highlight_start":1,"highlight_end":1},{"text":"            ],","highlight_start":1,"highlight_end":1},{"text":"            buffer: [ $($rest)* ]","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        codegen_extra_impls!({","highlight_start":1,"highlight_end":1},{"text":"            type: class,","highlight_start":1,"highlight_end":1},{"text":"            rust_name: $rust_name,","highlight_start":1,"highlight_end":1},{"text":"            ruby_name: $ruby_name,","highlight_start":1,"highlight_end":1},{"text":"            meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":1},{"text":"            struct: $struct,","highlight_start":1,"highlight_end":1},{"text":"            methods: [ $($method)* ]","highlight_start":1,"highlight_end":1},{"text":"        });","highlight_start":1,"highlight_end":1},{"text":"    };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    {","highlight_start":1,"highlight_end":1},{"text":"        type: done,","highlight_start":1,"highlight_end":1},{"text":"        classes: [ $(","highlight_start":1,"highlight_end":1},{"text":"            {","highlight_start":1,"highlight_end":1},{"text":"                rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":1},{"text":"                ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":"                struct: { $($struct:tt)* },","highlight_start":1,"highlight_end":1},{"text":"                methods: [ $($method:tt)* ]","highlight_start":1,"highlight_end":1},{"text":"            }","highlight_start":1,"highlight_end":1},{"text":"        )* ]","highlight_start":1,"highlight_end":1},{"text":"    } => {","highlight_start":1,"highlight_end":1},{"text":"        $(","highlight_start":1,"highlight_end":1},{"text":"            $($struct)*","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            impl $rust_name {","highlight_start":1,"highlight_end":1},{"text":"                $($method)*","highlight_start":1,"highlight_end":1},{"text":"            }","highlight_start":1,"highlight_end":1},{"text":"        )*","highlight_start":1,"highlight_end":1},{"text":"    };","highlight_start":1,"highlight_end":1},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"codegen_init!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/init.rs","byte_start":16,"byte_end":317,"line_start":2,"line_end":14,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! codegen_init {","highlight_start":1,"highlight_end":1},{"text":"    { [ $($class:tt)* ] } => {","highlight_start":1,"highlight_end":1},{"text":"        #[allow(non_snake_case)]","highlight_start":1,"highlight_end":1},{"text":"        #[no_mangle]","highlight_start":1,"highlight_end":1},{"text":"        pub extern \"C\" fn Init_native() {","highlight_start":1,"highlight_end":1},{"text":"            $crate::sys::check_version();","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $(","highlight_start":1,"highlight_end":1},{"text":"                codegen_class_binding!($class, $class);","highlight_start":1,"highlight_end":1},{"text":"            )*","highlight_start":1,"highlight_end":1},{"text":"        }","highlight_start":1,"highlight_end":1},{"text":"    }","highlight_start":1,"highlight_end":1},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"codegen_class_binding!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/init.rs","byte_start":335,"byte_end":2003,"line_start":17,"line_end":77,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! codegen_class_binding {","highlight_start":1,"highlight_end":37},{"text":"    { $class:tt, {","highlight_start":1,"highlight_end":19},{"text":"        type: class,","highlight_start":1,"highlight_end":21},{"text":"        rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":34},{"text":"        ruby_name: { $($ruby_name:tt)* },","highlight_start":1,"highlight_end":42},{"text":"        meta: { pub: $pub:tt, reopen: false },","highlight_start":1,"highlight_end":47},{"text":"        struct: (),","highlight_start":1,"highlight_end":20},{"text":"        methods: [ $($method:tt)* ]","highlight_start":1,"highlight_end":36},{"text":"    } } => ({","highlight_start":1,"highlight_end":14},{"text":"        use ::std::mem::transmute;","highlight_start":1,"highlight_end":35},{"text":"        let def = $crate::ClassDefinition::new(cstr!($($ruby_name)*));","highlight_start":1,"highlight_end":71},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        $(","highlight_start":1,"highlight_end":11},{"text":"            codegen_define_method!(def, $class, $method);","highlight_start":1,"highlight_end":58},{"text":"        )*","highlight_start":1,"highlight_end":11},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        unsafe { $rust_name = transmute(def.class) };","highlight_start":1,"highlight_end":54},{"text":"    });","highlight_start":1,"highlight_end":8},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $class:tt, {","highlight_start":1,"highlight_end":19},{"text":"        type: class,","highlight_start":1,"highlight_end":21},{"text":"        rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":34},{"text":"        ruby_name: { $($ruby_name:tt)* },","highlight_start":1,"highlight_end":42},{"text":"        meta: { pub: $pub:tt, reopen: true },","highlight_start":1,"highlight_end":46},{"text":"        struct: (),","highlight_start":1,"highlight_end":20},{"text":"        methods: [ $($method:tt)* ]","highlight_start":1,"highlight_end":36},{"text":"    } } => ({","highlight_start":1,"highlight_end":14},{"text":"        use ::std::mem::transmute;","highlight_start":1,"highlight_end":35},{"text":"        let def = $crate::ClassDefinition::reopen(cstr!($($ruby_name)*));","highlight_start":1,"highlight_end":74},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        $(","highlight_start":1,"highlight_end":11},{"text":"            codegen_define_method!(def, $class, $method);","highlight_start":1,"highlight_end":58},{"text":"        )*","highlight_start":1,"highlight_end":11},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        unsafe { $rust_name = transmute(def.class) };","highlight_start":1,"highlight_end":54},{"text":"    });","highlight_start":1,"highlight_end":8},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    { $class:tt, {","highlight_start":1,"highlight_end":19},{"text":"        type: class,","highlight_start":1,"highlight_end":21},{"text":"        rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":34},{"text":"        ruby_name: { $($ruby_name:tt)* },","highlight_start":1,"highlight_end":42},{"text":"        meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":52},{"text":"        struct: { $($struct:tt)* },","highlight_start":1,"highlight_end":36},{"text":"        methods: [ $($method:tt)* ]","highlight_start":1,"highlight_end":36},{"text":"    } } => ({","highlight_start":1,"highlight_end":14},{"text":"        use ::std::mem::transmute;","highlight_start":1,"highlight_end":35},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        extern \"C\" fn __alloc__(_klass: $crate::sys::VALUE) -> $crate::sys::VALUE {","highlight_start":1,"highlight_end":84},{"text":"            $rust_name::__alloc_with__(None)","highlight_start":1,"highlight_end":45},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        let def = $crate::ClassDefinition::wrapped(cstr!($($ruby_name)*), __alloc__);","highlight_start":1,"highlight_end":86},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        $(","highlight_start":1,"highlight_end":11},{"text":"            codegen_define_method!(def, $class, $method);","highlight_start":1,"highlight_end":58},{"text":"        )*","highlight_start":1,"highlight_end":11},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        unsafe { $rust_name = transmute(def.class) }","highlight_start":1,"highlight_end":53},{"text":"    });","highlight_start":1,"highlight_end":8},{"text":"","highlight_start":1,"highlight_end":1},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"codegen_define_method!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/init.rs","byte_start":2021,"byte_end":7418,"line_start":80,"line_end":252,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! codegen_define_method {","highlight_start":1,"highlight_end":37},{"text":"    ($def:tt, {","highlight_start":1,"highlight_end":16},{"text":"        type: class,","highlight_start":1,"highlight_end":21},{"text":"        rust_name: $cls_rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"        $($rest:tt)*","highlight_start":1,"highlight_end":21},{"text":"    }, {","highlight_start":1,"highlight_end":9},{"text":"        type: class_method,","highlight_start":1,"highlight_end":28},{"text":"        rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":34},{"text":"        ruby_name: { $($ruby_name:tt)* },","highlight_start":1,"highlight_end":42},{"text":"        self: (),","highlight_start":1,"highlight_end":18},{"text":"        args: [ $($arg:tt : $argty:ty),* ],","highlight_start":1,"highlight_end":44},{"text":"        ret: { $($ret:tt)* },","highlight_start":1,"highlight_end":30},{"text":"        body: $body:tt","highlight_start":1,"highlight_end":23},{"text":"    }) => ({","highlight_start":1,"highlight_end":13},{"text":"        use $crate::sys::{VALUE};","highlight_start":1,"highlight_end":34},{"text":"        use $crate::{Error};","highlight_start":1,"highlight_end":29},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        extern \"C\" fn __ruby_method__(_: VALUE, $($arg : VALUE),*) -> VALUE {","highlight_start":1,"highlight_end":78},{"text":"            let result = __rust_method__($($arg),*);","highlight_start":1,"highlight_end":53},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            match result {","highlight_start":1,"highlight_end":27},{"text":"                Ok(value) => return value,","highlight_start":1,"highlight_end":43},{"text":"                Err(exception) => unsafe { exception.raise() }","highlight_start":1,"highlight_end":63},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        #[inline]","highlight_start":1,"highlight_end":18},{"text":"        fn __rust_method__($($arg : $crate::sys::VALUE),*) -> Result<VALUE, Error> {","highlight_start":1,"highlight_end":85},{"text":"            #[allow(unused_imports)]","highlight_start":1,"highlight_end":37},{"text":"            use $crate::{FromRuby, ToRuby};","highlight_start":1,"highlight_end":44},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $(","highlight_start":1,"highlight_end":15},{"text":"                let $arg = try!(<$argty>::from_ruby($arg));","highlight_start":1,"highlight_end":60},{"text":"            )*","highlight_start":1,"highlight_end":15},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $(","highlight_start":1,"highlight_end":15},{"text":"                let $arg = <$argty>::from_checked($arg);","highlight_start":1,"highlight_end":57},{"text":"            )*","highlight_start":1,"highlight_end":15},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            let result: Result<$($ret)*, Error> = handle_exception! {","highlight_start":1,"highlight_end":70},{"text":"                $cls_rust_name::$rust_name($($arg),*)","highlight_start":1,"highlight_end":54},{"text":"            };","highlight_start":1,"highlight_end":15},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            result.and_then(ToRuby::to_ruby)","highlight_start":1,"highlight_end":45},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        let name = cstr!($($ruby_name)*);","highlight_start":1,"highlight_end":42},{"text":"        let method = __ruby_method__ as *const $crate::libc::c_void;","highlight_start":1,"highlight_end":69},{"text":"        let arity = method_arity!($($arg)*);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        $def.define_method($crate::MethodDefinition::class(name, method, arity));","highlight_start":1,"highlight_end":82},{"text":"    });","highlight_start":1,"highlight_end":8},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    ($def:tt, {","highlight_start":1,"highlight_end":16},{"text":"        type: class,","highlight_start":1,"highlight_end":21},{"text":"        rust_name: $cls_rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"        ruby_name: $cls_ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"        meta: $meta:tt,","highlight_start":1,"highlight_end":24},{"text":"        struct: $struct:tt,","highlight_start":1,"highlight_end":28},{"text":"        $($rest:tt)*","highlight_start":1,"highlight_end":21},{"text":"    }, {","highlight_start":1,"highlight_end":9},{"text":"        type: instance_method,","highlight_start":1,"highlight_end":31},{"text":"        rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":34},{"text":"        ruby_name: { $($ruby_name:tt)* },","highlight_start":1,"highlight_end":42},{"text":"        self: { ownership: { $($ownership:tt)* }, name: $self:tt },","highlight_start":1,"highlight_end":68},{"text":"        args: [ $($arg:tt : $argty:ty),* ],","highlight_start":1,"highlight_end":44},{"text":"        ret: { $($ret:tt)* },","highlight_start":1,"highlight_end":30},{"text":"        body: $body:tt","highlight_start":1,"highlight_end":23},{"text":"    }) => ({","highlight_start":1,"highlight_end":13},{"text":"        use $crate::sys::{VALUE};","highlight_start":1,"highlight_end":34},{"text":"        use $crate::{Error};","highlight_start":1,"highlight_end":29},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        extern \"C\" fn __ruby_method__(rb_self: VALUE, $($arg : VALUE),*) -> VALUE {","highlight_start":1,"highlight_end":84},{"text":"            let result = __rust_method__(rb_self, $($arg),*);","highlight_start":1,"highlight_end":62},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            match result {","highlight_start":1,"highlight_end":27},{"text":"                Ok(value) => return value,","highlight_start":1,"highlight_end":43},{"text":"                Err(exception) => unsafe { exception.raise() }","highlight_start":1,"highlight_end":63},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        #[inline]","highlight_start":1,"highlight_end":18},{"text":"        fn __rust_method__(rb_self: VALUE, $($arg : VALUE),*) -> Result<VALUE, Error> {","highlight_start":1,"highlight_end":88},{"text":"            #[allow(unused_imports)]","highlight_start":1,"highlight_end":37},{"text":"            use $crate::{FromRuby, ToRuby};","highlight_start":1,"highlight_end":44},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            let rust_self = try!(<codegen_self_pointer_type! { struct: $struct, ownership: { $($ownership)* }, type: $cls_rust_name }>::from_ruby(rb_self));","highlight_start":1,"highlight_end":157},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $(","highlight_start":1,"highlight_end":15},{"text":"                let $arg = try!(<$argty>::from_ruby($arg));","highlight_start":1,"highlight_end":60},{"text":"            )*","highlight_start":1,"highlight_end":15},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            let rust_self = <codegen_self_pointer_type! { struct: $struct, ownership: { $($ownership)* }, type: $cls_rust_name }>::from_checked(rust_self);","highlight_start":1,"highlight_end":156},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $(","highlight_start":1,"highlight_end":15},{"text":"                let $arg = <$argty>::from_checked($arg);","highlight_start":1,"highlight_end":57},{"text":"            )*","highlight_start":1,"highlight_end":15},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            let result: Result<$($ret)*, Error> = handle_exception! {","highlight_start":1,"highlight_end":70},{"text":"                rust_self.$rust_name($($arg),*)","highlight_start":1,"highlight_end":48},{"text":"            };","highlight_start":1,"highlight_end":15},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            result.and_then(ToRuby::to_ruby)","highlight_start":1,"highlight_end":45},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        let name = cstr!($($ruby_name)*);","highlight_start":1,"highlight_end":42},{"text":"        let method = __ruby_method__ as *const $crate::libc::c_void;","highlight_start":1,"highlight_end":69},{"text":"        let arity = method_arity!($($arg)*);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        $def.define_method($crate::MethodDefinition::instance(name, method, arity))","highlight_start":1,"highlight_end":84},{"text":"    });","highlight_start":1,"highlight_end":8},{"text":"","highlight_start":1,"highlight_end":1},{"text":"    ($def:tt, {","highlight_start":1,"highlight_end":16},{"text":"        type: class,","highlight_start":1,"highlight_end":21},{"text":"        rust_name: $cls_rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":"        ruby_name: $cls_ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":"        meta: $meta:tt,","highlight_start":1,"highlight_end":24},{"text":"        struct: $struct:tt,","highlight_start":1,"highlight_end":28},{"text":"        $($rest:tt)*","highlight_start":1,"highlight_end":21},{"text":"    }, {","highlight_start":1,"highlight_end":9},{"text":"        type: initializer,","highlight_start":1,"highlight_end":27},{"text":"        rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":34},{"text":"        ruby_name: { $($ruby_name:tt)* },","highlight_start":1,"highlight_end":42},{"text":"        self: { ownership: {}, name: $self:tt },","highlight_start":1,"highlight_end":49},{"text":"        args: [ $($arg:tt : $argty:ty),* ],","highlight_start":1,"highlight_end":44},{"text":"        ret: { $($ret:tt)* },","highlight_start":1,"highlight_end":30},{"text":"        body: $body:tt","highlight_start":1,"highlight_end":23},{"text":"    }) => ({","highlight_start":1,"highlight_end":13},{"text":"        use $crate::sys::{VALUE};","highlight_start":1,"highlight_end":34},{"text":"        use $crate::{Error};","highlight_start":1,"highlight_end":29},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        impl $cls_rust_name {","highlight_start":1,"highlight_end":30},{"text":"            pub fn new($($arg : $argty),*) -> $($ret)* {","highlight_start":1,"highlight_end":57},{"text":"                $cls_rust_name::$rust_name(unsafe { $crate::sys::Qnil } , $($arg),*)","highlight_start":1,"highlight_end":85},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        extern \"C\" fn __ruby_initialize__(rb_self: VALUE, $($arg : VALUE),*) -> VALUE {","highlight_start":1,"highlight_end":88},{"text":"            let result = __rust_initialize__(rb_self $(, $arg)*);","highlight_start":1,"highlight_end":66},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            match result {","highlight_start":1,"highlight_end":27},{"text":"                Ok(value) => return value,","highlight_start":1,"highlight_end":43},{"text":"                Err(exception) => unsafe { exception.raise() }","highlight_start":1,"highlight_end":63},{"text":"            }","highlight_start":1,"highlight_end":14},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        #[inline]","highlight_start":1,"highlight_end":18},{"text":"        fn __rust_initialize__(rb_self: VALUE, $($arg : VALUE),*) -> Result<VALUE, Error> {","highlight_start":1,"highlight_end":92},{"text":"            #[allow(unused_imports)]","highlight_start":1,"highlight_end":37},{"text":"            use $crate::{FromRuby};","highlight_start":1,"highlight_end":36},{"text":"            use $crate::sys::{Data_Set_Struct_Value};","highlight_start":1,"highlight_end":54},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $(","highlight_start":1,"highlight_end":15},{"text":"                let $arg = try!(<$argty>::from_ruby($arg));","highlight_start":1,"highlight_end":60},{"text":"            )*","highlight_start":1,"highlight_end":15},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            $(","highlight_start":1,"highlight_end":15},{"text":"                let $arg = <$argty>::from_checked($arg);","highlight_start":1,"highlight_end":57},{"text":"            )*","highlight_start":1,"highlight_end":15},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            let rust_self = Box::new($cls_rust_name::initialize(rb_self, $($arg),*));","highlight_start":1,"highlight_end":86},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            unsafe { Data_Set_Struct_Value(rb_self, ::std::mem::transmute(rust_self)) };","highlight_start":1,"highlight_end":89},{"text":"","highlight_start":1,"highlight_end":1},{"text":"            Ok(rb_self)","highlight_start":1,"highlight_end":24},{"text":"        }","highlight_start":1,"highlight_end":10},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        let arity = method_arity!($($arg)*);","highlight_start":1,"highlight_end":45},{"text":"        let method = __ruby_initialize__ as *const $crate::libc::c_void;","highlight_start":1,"highlight_end":73},{"text":"","highlight_start":1,"highlight_end":1},{"text":"        $def.define_method($crate::MethodDefinition::instance(cstr!($($ruby_name)*), method, arity));","highlight_start":1,"highlight_end":102},{"text":"    });","highlight_start":1,"highlight_end":8},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}}],"children":[{"message":"`#[warn(deprecated)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: use of deprecated macro `try`: use the `?` operator instead\u001b[0m\n\u001b[0m  \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/lib.rs:17:1\u001b[0m\n\u001b[0m   \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m17\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m\u001b[1m\u001b[33m/\u001b[0m\u001b[0m \u001b[0m\u001b[0mruby! {\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m18\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m\u001b[1m\u001b[33m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m    class IndyWallet {\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m19\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m\u001b[1m\u001b[33m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m        struct {\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m20\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m\u001b[1m\u001b[33m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m            name: String,\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m...\u001b[0m\u001b[0m  \u001b[0m\u001b[0m\u001b[1m\u001b[33m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m81\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m\u001b[1m\u001b[33m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m    }\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m82\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m\u001b[1m\u001b[33m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m}\u001b[0m\n\u001b[0m   \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m\u001b[1m\u001b[33m|_^\u001b[0m\n\u001b[0m   \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m   \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(deprecated)]` on by default\u001b[0m\n\u001b[0m   \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: this warning originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)\u001b[0m\n\n"}}
[WARN] too much data in the log, truncating it
